BIN=../bin/
OBJDIR=../bin/
GEN=../gen/
TEST=../test/

CXX=g++
CXXFLAGS=-Wall

MODULES= attribute base_element base_sub_element choice data_element doctype_definition element multiplicity node_element sequence special_element sub_element
OBJS=$(patsubst %,$(OBJDIR)%.o, $(MODULES))

all: $(BIN)analyseDTD

gen: *.l *.y $(OBJS)
	flex -P dtd -o'$(GEN)lex.dtd.c' dtd.l
	bison -p dtd --debug --verbose --defines=$(GEN)dtd.tab.h dtd.y -o $(GEN)dtd.tab.c
	cp *.h $(GEN)

$(BIN)analyseDTD: gen
	$(CXX) $(CXXFLAGS) -DSTANDALONE -g -DYYDEBUG=1 -o $(BIN)analyseDTD $(GEN)lex.dtd.c $(GEN)dtd.tab.c $(OBJS)

# Déclaration des dépendances (à compléter):
$(OBJDIR)doctype_definition.o : base_element.h
$(OBJDIR)base_element.o : attribute.h
$(OBJDIR)special_element.o: base_element.h
$(OBJDIR)element.o: base_element.h base_sub_element.h
$(OBJDIR)node_element.o: base_element.h base_sub_element.h multiplicity.h
$(OBJDIR)sub_element.o: base_sub_element.h multiplicity.h
$(OBJDIR)data_element.o: base_sub_element.h
$(OBJDIR)choice.o: sub_element.h
$(OBJDIR)sequence.o: sub_element.h

$(OBJDIR)%.o: %.cpp %.h
	@echo "Compilation de "$<
	$(CXX) $(CXXFLAGS) -c $< -o $@;
	@echo ""

clean:
	-rm -rf $(GEN)*.tab.c $(GEN)lex.*.c $(GEN)*.tab.h $(GEN)*.output $(GEN)*.h $(BIN)analyseDTD $(OBJDIR)*.o

test:
	@cd $(TEST); ./test.sh

